package com.wl.dzt.sys.util;

import org.springframework.util.StringUtils;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

/**
 * @author wl_code@163.com
 * @version 1.0
 * @date 2018/7/17/017
 * @description 描述
 * 
 */
public class Base64 {

	/** 解码 */
	private static final BASE64Decoder DECODER = new BASE64Decoder();

	/** 编码 */
	private static final BASE64Encoder ENCODER = new BASE64Encoder();

	/**
	 * 加密base64
	 * 
	 * @param context
	 *            加密字符
	 * @return 加密后的字符
	 */
	public static final String encode(String context) {
		return new String(ENCODER.encode(context.getBytes()));
	}

	/**
	 * 加密base64
	 * 
	 * @param context
	 *            流
	 * @return 加密后的字符
	 */
	public static final String encodeToByte(byte[] context) {
		return new String(ENCODER.encode(context));
	}

	/**
	 * 解密base64
	 * 
	 * @param conetxt
	 *            字符
	 * @return 解密后的字符
	 */
	public static final String decode(String conetxt) {
		try {
			return new String(DECODER.decodeBuffer(conetxt));
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 解密base64
	 * 
	 * @param context
	 *            base64字符
	 * @return 解密后的字节
	 */
	public static final byte[] decodeToByte(String context) {
		try {
			return DECODER.decodeBuffer(context);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 写入base64图片
	 * 
	 * @param img
	 *            图片base64
	 * @param path
	 *            保存路径
	 * @return 是否成功
	 */
	public static final boolean writeBase64Img(String img, String path) {
		if (StringUtils.isEmpty(img)) {
			return false;
		}
		BASE64Decoder decoder = new BASE64Decoder();
		try {
			// Base64解码
			byte[] b = decoder.decodeBuffer(img);
			for (int i = 0; i < b.length; ++i) {
				if (b[i] < 0) {
					b[i] += 256;
				}
			}
			OutputStream out = new FileOutputStream(path);
			out.write(b);
			out.close();
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
}
